"""
口吻转换器 - 根据不同的口吻类型调整回复风格
"""

from typing import Dict, List
from tree_rag.dataclasses.api import ToneType


class ToneConverter:
    """口吻转换器"""

    @staticmethod
    def convert_system_prompt(system_prompt: str, tone: ToneType) -> str:
        """根据口吻类型转换系统提示词"""
        if tone == ToneType.STANDARD:
            return system_prompt

        tone_instructions = {
            ToneType.FRIENDLY: """请使用亲切友好的口吻回复，要求：
- 使用亲切的称呼如"亲爱的朋友"、"您好呀"
- 适当使用表情符号如😊、❤️、📞
- 语气要温暖、热情
- 可以适当使用口语化表达""",

            ToneType.PATIENT: """请使用耐心细致的口吻回复，要求：
- 语气要温和、耐心
- 解释要详细、步骤要清晰
- 适合老年人或对流程不熟悉的人
- 使用"咱们"、"慢慢来"等亲切用语
- 重要信息要重复强调""",

            ToneType.TRENDY: """请使用网感新颖的口吻回复，要求：
- 适当使用网络流行语和emoji表情
- 适合新媒体渠道发布
- 使用🔥、📌、🎉等符号突出重点
- 语言要轻快活泼、有吸引力
- 可以适当使用短句和分段"""
        }

        tone_instruction = tone_instructions.get(tone, "")
        return f"{system_prompt}\n\n{tone_instruction}"

    @staticmethod
    def convert_user_prompt(user_prompt: str, tone: ToneType) -> str:
        """根据口吻类型转换用户提示词"""
        if tone == ToneType.STANDARD:
            return user_prompt

        tone_instructions = {
            ToneType.FRIENDLY: "请用亲切友好的口吻回答，让用户感受到温暖和关怀。",
            ToneType.PATIENT: "请用耐心细致的口吻回答，确保用户能够完全理解。",
            ToneType.TRENDY: "请用网感新颖的口吻回答，让回复更具吸引力和传播力。"
        }

        tone_instruction = tone_instructions.get(tone, "")
        # 在用户提示词的末尾添加口吻指令
        if user_prompt.strip().endswith("user:"):
            # 如果是以user:结尾，在user:之前插入口吻指令
            parts = user_prompt.rsplit("user:", 1)
            return f"{parts[0]}{tone_instruction}\n\nuser:{parts[1]}"
        else:
            return f"{user_prompt}\n\n{tone_instruction}"

    @staticmethod
    def convert_answer(answer: str, tone: ToneType) -> str:
        """根据口吻类型转换答案文本（后处理）"""
        if tone == ToneType.STANDARD:
            return answer

        # 这里可以添加一些后处理逻辑，比如添加表情符号等
        # 但主要的口吻控制应该通过提示词来实现
        return answer


def apply_tone_to_prompt(system_prompt: str, user_prompt: str, tone: ToneType) -> tuple[str, str]:
    """应用口吻到提示词"""
    converter = ToneConverter()
    new_system_prompt = converter.convert_system_prompt(system_prompt, tone)
    new_user_prompt = converter.convert_user_prompt(user_prompt, tone)
    return new_system_prompt, new_user_prompt